package com.javacoo.xservice.base.support.expression.internal;

import com.javacoo.xservice.base.support.expression.Expression;

/**
 * SpelExpression
 * <p>说明:</p>
 * <li></li>
 * @author DuanYong
 * @since 2016年4月20日上午11:38:36
 */
public class SpelExpression implements Expression {

	/**
	 * 声明Spring EL表达式对象
	 */	
	private org.springframework.expression.Expression spelExpression;

	
	/**
	 * 构造函数
	 * 
	 * @param expression
	 *            Spring EL表达式对象
	 */	
	public SpelExpression(org.springframework.expression.Expression expression) {
		this.spelExpression = expression;
	}

	/**
	 * 
	 * 从表达式对应的上下文中取值
	 * <p>
	 * 
	 * @param root
	 *            存储表达式对应值的上下文
	 * @return 表达式对应的值
	 */	
	@Override
	public Object getValue(Object root) {
		return this.spelExpression.getValue(root);
	}

	/**
	 * 
	 * 从表达式对应的上下文中按照指定的数据类型取值
	 * <p>
	 * 
	 * @param root
	 *            存储表达式对应值的上下文
	 * @param clazz
	 *            目标数据类型对应的类
	 * @return 表达式对应的值
	 */
	@Override
	public <T> T getValue(Object root, Class<T> clazz) {
		return this.spelExpression.getValue(root, clazz);
	}

	/**
	 * 
	 * 将值设置到表达式对应的上下文中
	 * <p>
	 * 
	 * @param value
	 *            表达式对应的值
	 * @param root
	 *            存储表达式对应值的上下文
	 */
	@Override
	public void setValue(Object value, Object root) {
		this.spelExpression.setValue(root, value);
	}
}
